# 前言
在第10章中,我们学习了如何上手 Kubernetes Secret。我们都知道,Kubernetes Secret 的主要作用是来存放密码,密钥等机密信息。
但是在日常开发部署时,我们还会遇到一些环境变量的配置:例如你的数据库地址,负载均衡要转发的服务地址等等信息。这部分内容使用 Secret 显然不合适,打包在镜像内耦合又太严重。这里,我们可以借助 Kubernetes ConfigMap 来配置这项事情
# 什么是 ConfigMap
ConfigMap 是 Kubernetes 的一种资源类型,我们可以使用它存放一些环境变量和配置文件。信息存入后,我们可以使用挂载卷的方式挂载进我们的 Pod 内,也可以通过环境变量注入。和 Secret 类型最大的不同是,存在 ConfigMap 内的内容不会加密。
# 创建方式
和 Secret 一样, ConfigMap 也支持多种创建方式
# 命令行直接创建
第一种是使用命令行直接创建。我们直接使用 kubectl create configmap [config_name] 命令创建即可。格式如下:
kubectl create configmap [config_name] --from-literal=[key]=[value]
在这里, --from-literal 对应一条信息。如果想创建多个 key value 组合,向后重复 --from-literal=[key]=[value] 即可。
例如我创建一个 mysql 的配置文件,其中包含了服务地址,端口。则可以下面这种格式创建:
kubectl create configmap mysql-config \
--from-literal=MYSQL_HOST=192.168.1.172 \
--from-literal=MYSQL_PORT=3306
这里需要注意,configmap 的名称必须是全小写,特殊符号只能包含 ‘-’ 和 ‘.’。可以用下面的这个正则表达式校验下看看符不符合规则:
a-z0-9?(.a-z0-9?)*')
创建成功后,我们可以使用 kubectl get cm 查看我们创建过的 configmap:

可以看到,上面的就是我们刚创建的 ConfigMap。里面的 DATA 为 2 ,代表有 2 条数据存在。我们直接使用 kubectl describe cm mysql-config 即可查看下这个 ConfigMap 的具体信息:

这里可以看到刚才我们存放的数据,代表该 configmap 创建成功。
# 配置清单创建
当然,通过一个命令清单创建的方式也很简单。
我们新建一个文件,名称为 mysql-config-file.yaml ,填入以下内容:
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config-file
data:
MYSQL_HOST: '192.168.1.172'
MYSQL_PORT: 3306
字符串不要忘记加引号
在这里,相信大部分字段大家已经都非常熟练了。kind 的值为 ConfigMap ,代表声明一个 ConfigMap 类型的资源;
